
#ifndef LOGGER_H
#define LOGGER_H

// INCLUDES ********************************************************************

#include <string>

// FORWARD DECLARATIONS ********************************************************

// *****************************************************************************

//! Logger
//! 
//! Class to log either to a file or to console, useful when debugging.
//! This is singleton class, the one and only instance is accessed via 
//! Logger::

// *****************************************************************************

namespace Meteor 
{
    class Logger
    {    
        public:
            //! always logging
            static void Log( const std::string& message);
            
            //! variable arguments
            static void Log( const std::string& msg, ...);
            
            //! logging in debug mode only
            static void DebugLog( const std::string& message);
            
            //! variable arguments
            static void DebugLog( const char* msg, ...);
        
            static void Error( const char* msg, ...);
        
        private:
            Logger();
            
            //! prevent copies
            Logger( const Logger&);
            
            Logger& operator=( const Logger&);
            
            //! internally used
            static void Log( const std::string& msg, va_list arguments);
        
    }; // end of class Logger

} // end of namespace Meteor

#endif
